/**
 * 判断字符是否为中文汉字（支持简体和繁体）
 *
 * 此函数使用Unicode范围匹配汉字：
 * - CJK基本汉字区 \u4e00-\u9fff
 * - CJK扩展A区 \u3400-\u4dbf
 * - CJK兼容汉字 \uf900-\ufaff
 * - CJK扩展B区 \u{20000}-\u{2a6df}
 * - CJK扩展C区 \u{2a700}-\u{2b73f}
 * - CJK扩展D区 \u{2b740}-\u{2b81f}
 * - CJK扩展E区 \u{2b820}-\u{2ceaf}
 * - CJK扩展F区 \u{2ceb0}-\u{2ebef}
 * - CJK扩展G区 \u{30000}-\u{3134f}
 * - CJK补充兼容区 \u{2f800}-\u{2fa1f}
 *
 * 对于ES2018+环境，可以使用Unicode属性转义\p{Script=Han}进行更全面的匹配
 *
 * @param char 要检测的字符
 * @returns 是否为中文汉字
 */
export const isChinese = (char) => {
  // 尝试使用Unicode属性转义（需要ES2018+支持）
  try {
    const patternModern = /\p{Script=Han}/u;
    return patternModern.test(char);
  } catch (e) {
    console.warn(e);
    try {
      // 尝试使用Unicode码点表示法（需要ES6支持）
      const patternES6 = new RegExp(
        '[\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]|' +
          '[\u{20000}-\u{2a6df}\u{2a700}-\u{2b73f}\u{2b740}-\u{2b81f}\u{2b820}-\u{2ceaf}\u{2ceb0}-\u{2ebef}\u{30000}-\u{3134f}\u{2f800}-\u{2fa1f}]',
        'u'
      );
      return patternES6.test(char);
    } catch (e2) {
      console.warn(e2);
      // 最终降级方案：仅匹配基本区域
      const patternBasic = /[\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]/;
      return patternBasic.test(char);
    }
  }
};
